package com.sxj.corejava.code14_Lambda表达式;

import java.sql.SQLOutput;
import java.util.List;

/**
 * @author 石小俊
 */
public class Test11_练习 {

    private static List<Emp> emps = Emp.getData();

    public static void main(String[] args) {
//        test01();
//        test02();
//        test03();
//        test04();
//        test05();
//        test06();
        test07();
    }

    // 1.找出所有员工,并按工资升序排序,打印出员工姓名与工资
    public static void test01() {
        emps.stream()
                .sorted((e1, e2) -> (int) (e1.getSalary() - e2.getSalary()))
                .forEach(e -> System.out.println("姓名:" + e.getName() + ",工资:" + e.getSalary()));
    }

    // 2.找出所有研发部员工,按照工资降序排序,打印出员工姓名、工资、部门
    public static void test02() {
        emps.stream()
                .filter(e -> "研发部".equals(e.getDept().getName()))
                .sorted((e1, e2) -> (int) (e2.getSalary() - e1.getSalary()))
                .forEach(e -> System.out.println("姓名:" + e.getName() + ",工资:" + e.getSalary() + ",所属部门:" + e.getDept().getName()));
    }

    // 3.找出员工都属于哪些部门
    public static void test03() {
        emps.stream()
                .map(e -> e.getDept().getName())
                .distinct()
                .forEach(System.out::println);
    }

    // 4.输出最高工资的员工信息
    public static void test04() {
        Emp emp = emps.stream()
                .max((e1, e2) -> (int) (e1.getSalary() - e2.getSalary()))
                .get();
        System.out.println("编号:" + emp.getId() + "姓名:" + emp.getName() + ",工资:" + emp.getSalary() + ",所属部门:" + emp.getDept().getName());
    }

    // 5.输出最低工资的员工信息
    public static void test05() {
        Emp emp = emps.stream()
                .min((e1, e2) -> (int) (e1.getSalary() - e2.getSalary()))
                .get();
        System.out.println("编号:" + emp.getId() + "姓名:" + emp.getName() + ",工资:" + emp.getSalary() + ",所属部门:" + emp.getDept().getName());
    }

    // 6.输出员工的平均工资
    public static void test06() {
        // 获取所有员工工资的总和
        Double sumSalary = emps.stream()
                .map(e -> e.getSalary())
                .reduce(Double::sum)
                .get();

        // 获取员工人数
        long count = emps.stream().count();
        System.out.println("平均工资:" + sumSalary / count);
    }

    // 7.在每一个员工姓名前加前缀itany_
    public static void test07() {
        emps.stream()
                .map(e -> "itany_" + e.getName())
                .forEach(System.out::println);
    }
}
